package com.door43.translationstudio.newui.translate; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; import com.door43.tools.reporting.Logger; import com.door43.translationstudio.R; import com.door43.translationstudio.core.Library; import com.door43.translationstudio.core.SourceLanguage; import com.door43.translationstudio.core.SourceTranslation; import com.door43.translationstudio.core.TargetTranslation; import com.door43.translationstudio.core.Translator; import com.door43.translationstudio.newui.BaseFragment; import com.door43.translationstudio.AppContext; import org.json.JSONException; import java.security.InvalidParameterException; import java.util.Locale; /** * Created by joel on 9/14/2015. */ public class FirstTabFragment extends BaseFragment implements ChooseSourceTranslationDialog.OnClickListener { private Translator mTranslator; private Library mLibrary; private OnEventListener mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_first_tab, container, false); mTranslator = AppContext.getTranslator(); mLibrary = AppContext.getLibrary(); Bundle args = getArguments(); final String targetTranslationId = args.getString(AppContext.EXTRA_TARGET_TRANSLATION_ID, null); TargetTranslation targetTranslation = mTranslator.getTargetTranslation(targetTranslationId); if(targetTranslation == null) { throw new InvalidParameterException("a valid target translation id is required"); } ImageButton newTabButton = (ImageButton) rootView.findViewById(R.id.newTabButton); LinearLayout secondaryNewTabButton = (LinearLayout) rootView.findViewById(R.id.secondaryNewTabButton); TextView translationTitle = (TextView) rootView.findViewById(R.id.source_translation_title); SourceLanguage sourceLanguage = mLibrary.getPreferredSourceLanguage(targetTranslation.getProjectId(), Locale.getDefault().getLanguage()); translationTitle.setText(sourceLanguage.projectTitle + " - " + targetTranslation.getTargetLanguageName()); View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View v) { FragmentTransaction ft = getFragmentManager().beginTransaction(); Fragment prev = getFragmentManager().findFragmentByTag("tabsDialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); ChooseSourceTranslationDialog dialog = new ChooseSourceTranslationDialog(); Bundle args = new Bundle(); args.putString(ChooseSourceTranslationDialog.ARG_TARGET_TRANSLATION_ID, targetTranslationId); dialog.setOnClickListener(FirstTabFragment.this); dialog.setArguments(args); dialog.show(ft, "tabsDialog"); } }; newTabButton.setOnClickListener(clickListener); secondaryNewTabButton.setOnClickListener(clickListener); // attach to tabs dialog if(savedInstanceState != null) { ChooseSourceTranslationDialog dialog = (ChooseSourceTranslationDialog) getFragmentManager().findFragmentByTag("tabsDialog"); if(dialog != null) { dialog.setOnClickListener(this); } } return rootView; } public void onAttach(Activity activity) { super.onAttach(activity); try { this.mListener = (OnEventListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement FirstTabFragment.OnEventListener"); } } @Override public void onCancelTabsDialog(String targetTranslationId) { } @Override public void onConfirmTabsDialog(String targetTranslationId, String[] sourceTranslationIds) { String[] oldSourceTranslationIds = AppContext.getOpenSourceTranslationIds(targetTranslationId); for(String id:oldSourceTranslationIds) { AppContext.removeOpenSourceTranslation(targetTranslationId, id); } if(sourceTranslationIds.length > 0) { // save open source language tabs for(String id:sourceTranslationIds) { SourceTranslation sourceTranslation = mLibrary.getSourceTranslation(id); if(sourceTranslation != null) { AppContext.addOpenSourceTranslation(targetTranslationId, sourceTranslation.getId()); TargetTranslation targetTranslation = mTranslator.getTargetTranslation(targetTranslationId); if (targetTranslation != null) { try { targetTranslation.addSourceTranslation(sourceTranslation); } catch (JSONException e) { Logger.e(this.getClass().getName(), "Failed to record source translation (" + sourceTranslation.getId() + ") usage in the target translation " + targetTranslation.getId(), e); } } } } // redirect back to previous mode mListener.onHasSourceTranslations(); } } public interface OnEventListener { void onHasSourceTranslations(); } }